#还有一种装饰器  是给类使用的,就是在定义类的前面使用@装饰器
# @outer
# class Demo():
#     pass
#给类加装饰器,目的是给类增加属性和方法

'''使用函数装饰器,给类进行装饰,以增加属性和方法
def kuozhan(cls):
    def func2():
        print('我是在装饰器中追加的类方法')
    cls.name='我是在装饰器中追加的类属性'
    cls.func2=func2

    return cls

@kuozhan
class Demo():
    def func():
        print('我是Demo类中定义的func方法')

Demo()
Demo.func()
Demo.func2()
print (Demo.name)
'''

'''使用类装饰器   给类进行修饰  增加属性和方法'''
class KuoZhan():
    def __call__(self,cls):
        #把接收的类  交给当前对象的属性
        self.cls=cls
        #返回一个函数
        return self.newfunc

    def newfunc(self):
        self.cls.name='我是在类装饰器中追加的属性'
        self.cls.func2=self.func2
        #返回一个类实例化的结果  对象
        return self.cls()

    def func2(self):
        print ('我是在类装饰器中追加的方法')

@KuoZhan()
class Demo():
    def func(self):
        print ('我是原类中的方法')

zs=Demo()
zs.func()
zs.func2()
print(zs.name)











